home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / snip0493.zip / IFACTOR.C < prev    next >
C/C++ Source or Header  |  1993-04-05  |  1KB  |  67 lines

  1. /*
  2. ** ifactor.c -- print prime factorization of a number
  3. **
  4. ** Ray Gardner -- 1985 -- public domain
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. int prevfact = 0;
  11. void factor (long);
  12. void show (long, int);
  13.  
  14. void main (int argc, char *argv[])
  15. {
  16.    while ( --argc )
  17.          factor(atol(*++argv));
  18. }
  19.  
  20. void factor (long n)
  21. {
  22.       long d;
  23.       int k;
  24.       long n0 = n;
  25.       prevfact = 0;
  26.  
  27.       printf("%ld  ",n);
  28.       if ( n < 2 )
  29.       {
  30.             printf("is less than 2.\n");
  31.             return;
  32.       }
  33.       else if ( n > 2 )
  34.       {
  35.             d = 2;
  36.             for ( k = 0; n % d == 0; k++ )
  37.                   n /= d;
  38.             if ( k )
  39.                   show(d,k);
  40.             for ( d = 3; d * d <= n; d += 2 )
  41.             { 
  42.                   for ( k = 0; n % d == 0; k++ )
  43.                         n /= d;
  44.                   if ( k )
  45.                         show(d,k);
  46.             }
  47.       }
  48.       if ( n > 1 )
  49.       {
  50.             if ( n == n0 )
  51.                   printf(" is prime");
  52.             else  show(n,1);
  53.       }
  54.       printf("\n");
  55. }
  56.  
  57. void show (long d, int k)
  58. {
  59.       if ( prevfact )
  60.             printf(" * ");
  61.       else  printf(" = ");
  62.       prevfact++;
  63.       printf("%ld",d);
  64.       if ( k > 1 )
  65.             printf("^%d",k);
  66. }
  67.